/*
 * Copyright 1999-2015 dangdang.com.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * </p>
 */

package com.lz.timer.an.common;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.dangdang.ddframe.job.event.JobEventConfiguration;
import com.dangdang.ddframe.job.event.rdb.JobEventRdbConfiguration;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperConfiguration;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;
import com.lz.mongo.MongoUtilFactory;
import com.lz.mongo.MongoUtilI;

import lombok.extern.slf4j.Slf4j;

/**
 * @author rench
 * @Description: bean配置
 */
@Configuration
@Slf4j
public class BeanConfig {

    /**
     * @param serverList 注册zk
     * @param namespace  命名空间
     * @return
     */
    @Bean(initMethod = "init")
    @ConditionalOnExpression("'${regCenter.serverList}'.length() > 0")
    public ZookeeperRegistryCenter regCenter(@Value("${regCenter.serverList}") final String serverList,
                                             @Value("${regCenter.namespace}") final String namespace) {
        log.info("ZookeeperRegistryCenter serverList:{}, namespace:{}", serverList, namespace);
        return new ZookeeperRegistryCenter(new ZookeeperConfiguration(serverList, namespace));
    }

    /**
     * jobDataSource
     */
    @Autowired
    @Qualifier("jobDataSource")
    private DataSource jobDataSource;

    /**
     * jobEventConfig
     *
     * @return
     */
    @Bean
    public JobEventConfiguration jobEventConfiguration() {
        log.info("===========JobEventConfiguration==========");
        return new JobEventRdbConfiguration(jobDataSource);
    }

    /**
     * 
     * mongoUtilI
     */
    @Bean
    public MongoUtilI mongoUtilI() {
    	log.info("===========MongoUtilI==========");
    	return MongoUtilFactory.mongoUtil1();
    }
}
